home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / links.s < prev    next >
Text File  |  1980-12-12  |  2KB  |  135 lines

  1. conaddr: dc.l 0
  2. linkaddr: dc.l 0
  3. distaddr: dc.l 0
  4. num: dc.w 0
  5.  
  6. start:
  7.  lea conaddr(pc),a0
  8.  move.w 12(a0),d7
  9.  move.l 8(a0),a2
  10.  move.l 4(a0),a1
  11.  move.l (a0),a0
  12.  
  13.  move.l a1,a3
  14.  move.l a2,a4
  15.  move.w d7,d0
  16.  muls d0,d0
  17.  subq #1,d0
  18. initloop:
  19.  move.b #-1,(a3)+
  20.  move.w #1000,(a4)+
  21.  dbra d0,initloop
  22.  
  23. * Now link all those ones connected
  24. * directly
  25.  
  26.  move.l a0,a3
  27.  move.l a1,a4
  28.  move.l a2,a5
  29.  move.w d7,d0
  30.  move.w #0,d2
  31. downlink:
  32.  move.w d7,d1
  33.  move.w #0,d3
  34. acrosslink:
  35.  
  36.  tst.b (a3)+
  37.  beq.s nolink
  38.  move.b d3,(a4)
  39.  move.w #1,(a5)
  40. nolink:
  41.  addq #1,a4
  42.  addq #2,a5
  43.  
  44.  addq #1,d3
  45.  subq #1,d1
  46.  bgt.s acrosslink
  47.  
  48.  addq #1,d2
  49.  subq #1,d0
  50.  bgt.s downlink
  51.  
  52. * Now repeatedly branch to a routine
  53. * which links up the indirect ones.
  54.  
  55.  move.w d7,d6
  56. repeat:
  57.  
  58.  movem.l d0-d7/a0-a6,-(a7)
  59.  bsr indirect
  60.  movem.l (a7)+,d0-d7/a0-a6
  61.  
  62.  subq.w #1,d6
  63.  bgt.s repeat
  64.  
  65.  rts
  66.  
  67. indirect:
  68.  
  69.  moveq #0,d0
  70.  moveq #0,d1
  71.  move.l a1,a4
  72.  move.l a2,a5
  73.  
  74. downind:
  75.  moveq #0,d1
  76.  move.l a0,a3
  77.  
  78. acrossind:
  79.  
  80.  tst.b (a0)+
  81.  bne.s alreadydone
  82.  tst.w (a1)
  83.  bge.s alreadydone
  84.  
  85.  moveq #0,d2
  86.  move.w #1000,d3
  87.  move.w #-1,d6
  88.  movem.l a3/a4/a5,-(a7)
  89.  
  90. lookthroughloop:
  91.  tst.b (a3)+
  92.  beq.s notcon
  93.  move.w d2,d4
  94.  muls d7,d4
  95.  ext.l d1
  96.  add.l d1,d4
  97.  tst.b (a4,d4.l)
  98.  blt.s notcon
  99.  
  100.  cmp.w (a5,d4.l*2),d3
  101.  blt.s notcon
  102.  
  103.  move.w (a5,d4.l*2),d3
  104.  move.b d2,d6
  105.  
  106. notcon:
  107.  
  108.  addq #1,d2
  109.  cmp.w d7,d2
  110.  blt.s lookthroughloop
  111.  
  112.  tst.b d6
  113.  blt.s notfoundone
  114.  
  115.  move.b d6,(a1)
  116.  add.w #1,d3
  117.  move.w d3,(a2)
  118.  
  119. notfoundone:
  120.  
  121.  movem.l (a7)+,a3/a4/a5
  122.  
  123. alreadydone:
  124.  addq #1,a1
  125.  addq #2,a2
  126.  
  127.  addq #1,d1
  128.  cmp.w d7,d1
  129.  blt.s acrossind
  130.  addq #1,d0
  131.  cmp.w d7,d0
  132.  blt.s downind
  133.  
  134.  rts
  135.